.intel_syntax noprefix

.global write, read, fork, execve, real_waitid, _exit

# ssize_t write(int fd, const void *buf, size_t count);
write:
    mov rax, 1
    syscall
    ret

# ssize_t read(int fd, void *buf, size_t count);
read:
    mov rax, 0
    syscall
    ret

# pid_t fork(void);
fork:
    mov rax, 57
    syscall
    ret

execve:
    mov rax, 59
    syscall
    ret

# int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options, struct rusage *ru);
# 根据 System V AMD64 ABI 规则，系统调用参数依次使用如下寄存器：
# rdi - 第一个参数 (idtype)
# rsi - 第二个参数 (id)
# rdx - 第三个参数 (infop)
# r10 - 第四个参数 (options)
# r8 - 第五个参数 (ru)

# 参数顺序	C 调用约定 (ABI)	Linux 内核系统调用
# 第 1 个	rdi	                rdi
# 第 2 个	rsi	                rsi
# 第 3 个	rdx	                rdx
# 第 4 个	rcx	                r10 ✅
# 第 5 个	r8	                r8
# 第 6 个	r9	                r9
real_waitid:
    mov rax, 247
    mov r10, rcx
    syscall
    ret

_exit:
    mov rax, 60
    syscall
    # no return
